home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-06-04 | 6.6 KB | 241 lines |
- 10 REM **** CPABAR ****
- 20 CLOSE
- 50 DEFINT B-Z:DEFSNG A:DEFSNG Q
- 52 DIM X$(12)
- 53 FOR I=1 TO 12
- 54 READ X$(I)
- 55 NEXT I
- 56 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"
- 60 DIM T$(100),EF(500),ES(500),LF(500),R6$(500),D$(500),A(1500),A3(100)
- 62 B4=VAL(MID$(DATE$,1,2))
- 64 B5=VAL(MID$(DATE$,4,2))
- 66 B6=VAL(MID$(DATE$,9,2))
- 70 DEF FNV(I)=INT((I-1)*Q+1.5)
- 75 T1$=" EACH COLUMN WILL REPRESENT ###.## \ \ "
- 80 GOSUB 5000
- 90 GOSUB 9000 'READ LGS FILE
- 92 GOSUB 8000 'READ HOLIDAYS
- 95 GOSUB 7000 'FIGURE DAYS
- 100 PRINT "Output file will be ";F$;".BAR O.K. (Y/N) ";
- 102 INPUT Q$:IF Q$="N" THEN INPUT "Enter new name ";F$ ELSE F$=F$+".BAR"
- 105 OPEN F$ FOR OUTPUT AS #2
- 110 INPUT "Enter width for the chart. ENTER defaults to 90 : ",L
- 120 IF L<=0 OR L>95 THEN L=90 ELSE L=INT(L)
- 130 IF LEFT$(T6$,3)<>"WOR" AND LEFT$(T6$,3)<>"CAL" THEN PRINT "**** BAR CHARTS ONLY WORK ON PROJECTS WITH CALENDAR OR WORKING DAYS ****":GOTO 500
- 140 INPUT "Want Whole project or Portion (W/P) ",W$
- 150 V5=0'FLAG FOR WHETHER ALL ACTIVITIES ARE INCLUDED IN THE PORTION
- 160 IF LEFT$(W$,1)<>"P" THEN Q=C3/L:PRINT "****";:PRINT USING T1$;Q,T6$;:PRINT "****":GOTO 970
- 170 INPUT "Will several portions be placed together (Y/N/Help) ",Q$
- 180 IF LEFT$(Q$,1)="N" THEN 260 ELSE V5=1
- 190 IF LEFT$(Q$,1)="H" THEN 210 ELSE 260
- 210 PRINT:PRINT;"If you want to put several portions together, reply 'Y'. PCPM will space"
- 220 PRINT "activities within each portion so the activities which extend from one portion "
- 230 PRINT "to another will be in alignment when the barcharts are placed side by side."
- 250 V5=0:GOTO 170
- 260 IF T7=0 THEN INPUT "Enter beginning date in MMDDYY format ",A7 ELSE 292
- 280 GOSUB 1750 'FIND VALID DATE AND ARRAY A NUMBER
- 290 D5=J:GOTO 300
- 292 INPUT "Enter beginning time period number (integer) ",D5
- 294 IF D5<=0 OR D5>C3 THEN BEEP:PRINT "**** INVALID RESPONSE ****":GOTO 292
- 300 PRINT "Enter ending date (MMDDYY) or length in ";T6$;" ";
- 301 INPUT A7
- 320 IF A7<10000 THEN D7=A7:D6=D5+D7:GOTO 360
- 340 GOSUB 1750
- 350 D6=J
- 360 IF D6<=D5 THEN 260 ELSE Q=(D6-D5)/L
- 365 PRINT "****";:PRINT USING T1$;Q,T6$;:PRINT "****":GOTO 970
- 400 PRINT #2,G9$
- 410 PRINT #2,TAB(36);
- 420 GOSUB 850
- 430 INPUT "Want another Bar Chart from the same run (N/Y) ",Q$
- 490 IF LEFT$(Q$,1)="Y" THEN 110
- 500 CLOSE #2
- 510 CHAIN "CPAMENU"
- 550 REM
- 560 FOR I=1 TO L+1
- 580 A6=A(FNV(I)+D5-1)
- 590 GOSUB 910
- 600 T$(I)=P6$
- 610 NEXT I
- 650 S7=LEN(T$(1))
- 660 FOR I=2 TO L+1
- 670 IF LEN(T$(I))>S7 THEN S7=LEN(T$(I))
- 680 NEXT I
- 690 I=S7
- 700 FOR J=1 TO L+1
- 710 I1=LEN(T$(J))
- 720 IF I-I1=0 THEN 750
- 730 T$(J)=" "+T$(J)
- 740 GOTO 710
- 750 NEXT J
- 760 FOR J=1 TO I
- 770 PRINT #2,TAB(36);MID$(T$(1),J,1);
- 780 FOR K=2 TO L+1
- 790 PRINT #2,MID$(T$(K),J,1);
- 800 NEXT K
- 810 PRINT #2,G9$
- 820 NEXT J
- 830 REM **** PRINTING HEADINGS AND DASHES ****
- 840 PRINT #2," ACT DESCRIPTION ";
- 850 T2$=""
- 855 FOR K=1 TO L+1
- 860 T2$=T2$+"="
- 870 NEXT
- 875 PRINT #2,T2$
- 880 PRINT #2,G9$
- 890 RETURN
- 900 REM **** CONVERT TO MONTH DAY YEAR IN STRING FORMAT ****
- 910 P6$=STR$(A6)
- 930 IF LEN(P6$)=6 THEN P6$=" "+P6$
- 940 U9=VAL(LEFT$(P6$,3))
- 950 P6$=X$(U9)+RIGHT$(P6$,4)
- 960 RETURN
- 970 T4=INT((L+3)/2)
- 980 PRINT #2,G8$
- 990 PRINT #2,TAB(T4);"CRITICAL PATH ANALYSIS: BAR CHART"
- 1000 PRINT #2,G9$
- 1010 T4=INT((L+8)/2)
- 1020 PRINT #2,G9$
- 1030 PRINT #2,TAB(T4+10);"LEGEND"
- 1040 PRINT #2,TAB(T4);"==========================="
- 1050 PRINT #2,TAB(T4);"== CRITICAL PATH = # =="
- 1060 PRINT #2,TAB(T4);"== ACTIVITY DURATION = * =="
- 1070 PRINT #2,TAB(T4);"== FLOAT TIME = - =="
- 1080 PRINT #2,TAB(T4);"== FINISHED ACTIVITY = C =="
- 1090 PRINT #2,TAB(T4);"== CONTINUATIONS = < > =="
- 1100 PRINT #2,TAB(T4);"==========================="
- 1110 PRINT #2,G9$
- 1120 P4$="PROJECT NAME : "+P$
- 1130 T4=INT((L+15-LEN(P4$))/2)
- 1140 PRINT #2,TAB(T4);P4$;" RUN DATE: ";X$(B4);B5;"19";RIGHT$(STR$(B6),2)
- 1150 PRINT #2,G9$
- 1160 PRINT #2,G9$
- 1170 IF LEFT$(W$,1)<>"P" THEN 1210 ELSE PRINT #2,TAB(20);"REQUESTED WIDTH =";
- 1180 PRINT #2,L;" REQUESTED DAYS = ";D6-D5;
- 1190 T4=64
- 1200 GOTO 1220
- 1210 T4=INT((L+27-LEN(T6$))/2)
- 1220 PRINT #2,TAB(T4);"TIME PERIOD = ";T6$;
- 1230 PRINT #2, USING " * ###.##";Q
- 1240 PRINT #2,G9$
- 1250 IF LEFT$(W$,1)="P" THEN 1270 ELSE D5=1
- 1260 D6=D5+C3
- 1270 GOSUB 550
- 1280 K5=0
- 1290 A$="*"
- 1300 B$="-"
- 1320 PRINT #2,G9$
- 1330 PRINT " **** FORMING BAR CHART ****"
- 1360 FOR I=1 TO N
- 1370 W=I
- 1380 IF V5=1 THEN 1410
- 1390 IF ES(W)+1>D6 THEN 1730
- 1400 IF LF(W)+1<D5 AND EF(W)+1<D5 THEN 1730
- 1410 IF EF(W)=LF(W) THEN A$="#" ELSE A$="*"
- 1420 IF R6$(W)<>"" THEN A$="C"
- 1430 IF V5=1 THEN 1450
- 1440 IF A$="C" AND EF(W)+1<D5 THEN 1730
- 1450 IF V5=1 AND D6<ES(W)+1 THEN 1690
- 1460 IF D5>=ES(W)+1 THEN A=D5 ELSE A=ES(W)+1
- 1470 IF D6<=LF(W)+1 THEN C=D6 ELSE C=LF(W)+1
- 1480 IF D5>=EF(W)+1 THEN B=D5 ELSE 1500
- 1490 IF D5>=EF(W)+1 THEN 1510
- 1500 IF D6<=EF(W)+1 THEN B=D6 ELSE B=EF(W)+1
- 1510 A=INT((A-D5)/Q)+5
- 1520 C=INT((C-D5)/Q)+5
- 1530 B=INT((B-D5)/Q)+5
- 1540 PRINT #2,LEFT$(D$(W),32);TAB(A+30);
- 1550 IF D5>ES(W)+1 OR D5>EF(W)+1 THEN PRINT #2,"<"; ELSE PRINT #2," ";
- 1560 IF D5>=EF(W)+1 THEN B=B-1 ELSE 1580
- 1570 IF V5=1 AND A$="C" AND EF(W)+1<D5 THEN 1720 ELSE 1650
- 1580 FOR J=A TO B
- 1610 PRINT #2,A$;
- 1620 NEXT J
- 1630 IF A$="C" THEN 1680 'STOP AT EARLY FINISH OF COMPLETE ACT
- 1640 IF D6<=EF(W)+1 OR B>=C THEN 1710
- 1650 FOR J=B+1 TO C
- 1660 PRINT #2,B$;
- 1670 NEXT J
- 1680 IF A$="C" AND D6>EF(W)+1 THEN 1720 ELSE 1710
- 1690 PRINT #2,LEFT$(D$(W),33);TAB(36+D6-D5);">";
- 1700 GOTO 1720
- 1710 IF D6<LF(W)+1 OR D6<EF(W)+1 THEN PRINT #2,">";
- 1720 PRINT #2,G9$
- 1730 NEXT I
- 1740 GOTO 400
- 1750 FOR J=1 TO C3+1 '**** FIND DATE AND RETURN POINTER *****
- 1760 IF A7=A(J) THEN 1810
- 1770 NEXT J
- 1780 BEEP:PRINT "**** DAY";A7;"MUST BE BETWEEN";A(1);"AND";A(C3+1);" NO HOLIDAYS ****"
- 1790 INPUT "Enter new day (MMDDYY) ",A7
- 1800 GOTO 1750
- 1810 RETURN
- 5000 REM **** READING IN ALREADY CREATED INPUT FILE ******************
- 5010 INPUT "Enter the name of the input file [.CPM] ";G$
- 5015 IF G$="Q" OR G$="QUIT" THEN 3500
- 5020 P=INSTR(1,G$,"."):IF P<>0 THEN F$=LEFT$(G$,INSTR(1,G$,".")-1) ELSE F$=G$
- 5030 IF LEN(F$)>8 THEN PRINT "**** NOT A VALID PCPM FILE ****":BEEP:GOTO 5010
- 5035 ON ERROR GOTO 5300
- 5037 G$=F$+".CPM"
- 5040 OPEN G$ FOR INPUT AS #3
- 5050 INPUT #3,P$,T6$,DA$
- 5140 M6=VAL(LEFT$(DA$,2)):D6=VAL(MID$(DA$,3,2)):Y6=VAL(RIGHT$(DA$,2))
- 5150 CLOSE #3
- 5160 PRINT " **** INPUT FILE READ ****"
- 5170 RETURN
- 5300 PRINT "**** FILE DOES NOT EXIST - TRY AGAIN ****":BEEP:GOTO 5000
- 7000 REM ** CREATE ARRAY OF MMDDYYS ******************************
- 7005 PRINT "**** CALCULATING DAYS ****"
- 7008 D1=1
- 7010 IF A(1)=0 THEN A(1)=M6*10000+D6*100+Y6
- 7020 D1=D1+1
- 7030 IF D1>C3+1 THEN RETURN
- 7040 A8=A8+1
- 7050 GOSUB 7130
- 7060 IF LEFT$(T6$,3)="CAL" THEN 7070 ELSE IF D4=6 OR D4=7 THEN 7040
- 7070 O8=0
- 7080 GOSUB 7240
- 7090 IF O8=1 THEN 7040
- 7100 A(D1)=M5*10000+D5*100+Y5
- 7110 GOTO 7020
- 7120 REM ** CONVERT CENTURY DAY TO MM, DD, YY **************************
- 7130 T9=INT(A8/1461)
- 7140 Y5=INT((A8-T9+364)/365)
- 7150 Y4=A8-INT((Y5-1)*1461/4)
- 7160 L8=2
- 7170 IF Y5/4=INT(Y5/4) THEN L8=1
- 7180 T9=Y4
- 7190 IF T9>61-L8 THEN T9=T9+L8
- 7200 M5=INT((T9*9+269)/275)
- 7210 D5=T9-INT(M5*275/9)+30
- 7220 D4=A8-INT(A8/7)*7+1
- 7230 RETURN
- 7240 FOR J=1 TO H9 '**** HOLIDAY OR NOT ***********************************
- 7250 IF A8=A3(J) THEN O8=1
- 7260 NEXT J
- 7270 RETURN
- 8000 ON ERROR GOTO 8200
- 8010 OPEN F$+".HOL" FOR INPUT AS #1
- 8020 J=0
- 8030 J=J+1
- 8040 IF EOF(1) THEN 8100
- 8050 INPUT #1,A3(J)
- 8060 GOTO 8030
- 8100 H9=J-1 'NUMBER OF HOLIDAYS
- 8110 CLOSE #1:RETURN
- 8200 PRINT "**** NO HOLIDAY FILE - CONTINUING ****":RESUME 8110
- 9000 REM READING IN SORT FILE
- 9010 ON ERROR GOTO 9200 'NO SORT FILE
- 9020 OPEN F$+".LGS" FOR INPUT AS #1
- 9030 INPUT #1,A8,A(1),C3
- 9040 I=0
- 9050 I=I+1
- 9060 IF EOF(1) THEN 9100
- 9065 IF I MOD 10=0 THEN PRINT I;
- 9070 INPUT #1,D$(I),S,F,O2,D,ES(I),LS,EF(I),LF(I),FL,R6$(I),B
- 9080 GOTO 9050
- 9100 N=I-1
- 9105 PRINT " **** LGS FILE READ ****"
- 9110 CLOSE #1:RETURN
- 9200 PRINT "FILE ";F$;".LGS MUST BE CREATED BY OPTION 5 FIRST AND EXIST ON DISK****":BEEP:CHAIN "CPAMENU"
-